home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-05
/
atnet.zip
/
ATNET.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-16
|
5KB
|
214 lines
/*
* @NET.C
*
* Program to provide the same functionallity as the LANtastic NET program
* with the added ability to process indirect files (i.e. @NET @PARAMS.FIL)
*/
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "lantasti.h"
#define MAX_CMDS 6
#define MAX_CMD_SIZE 7
#define MAX_ARGS 10
#define MAX_ARG_SIZE 40
typedef struct
{
char Command [MAX_CMD_SIZE];
(*Function) (void);
} VC;
int unuse (void);
int help (void);
int login (void);
int logout (void);
int lpt (void);
int unuse (void);
int use (void);
int parse (void);
void ProcessArgs (void);
int indx;
char **Arguments;
char **FileArgs;
char Server [17];
union {
char UserID [17];
char Resource [17];
} Net;
char Password [17];
char Device [5];
int Timeout;
VC ValidCommands [MAX_CMDS] =
{
"HELP", help,
"LOGIN", login,
"LOGOUT", logout,
"LPT", lpt,
"UNUSE", unuse,
"USE", use
};
FILE *CmdStream;
FILE *AltCmdStream;
char Buffer [81];
int parse (void)
{
char *src, *dest;
if (strncmp ("\\\\", Arguments [indx], 2) != 0) {
strcpy (Device, Arguments [indx]);
indx++;
} else {
*Device = '\0';
}
if (strncmp ("\\\\", Arguments [indx], 2) == 0) {
src = Arguments [indx] + 2;
dest = Server;
while (*src != '\\') {
*dest++ = *src++;
}
src++;
dest = Net.UserID;
while (*src != '\0') {
*dest++ = *src++;
}
indx++;
strcpy (Password, Arguments [indx]);
} else {
*Server = '\0';
*Net.UserID = '\0';
Timeout = atoi (Arguments [indx]);
}
}
int help (void)
{
parse ();
clrscr ();
cprintf ("\n\r@NET - LANtastic Network Functions with Indirect File Support");
cprintf ("\n\r\n\rSupported commands are:");
cprintf ("\n\r HELP - Display this screen");
cprintf ("\n\r LOGIN - Login to a server");
cprintf ("\n\r LOGOUT - Log out of a server");
cprintf ("\n\r USE - Use a resource of a server");
cprintf ("\n\r UNUSE - Release a resource of a server");
cprintf ("\n\r LPT TIMEOUT - Set printer timeouts");
cprintf ("\n\r");
cprintf ("\n\r @<FNAME> - Execute commands from file <FNAME>");
cprintf ("\n\r\n\rPress a key to continue");
getch ();
return 0;
}
int login (void)
{
int retc = FALSE;
retc = ServerLogin (Server, Net.UserID, Password);
return (retc);
}
int logout (void)
{
return (ServerLogout (Server));
}
int lpt (void)
{
return (SetPtrTimeout ((int) Timeout * 18.2));
}
int unuse (void)
{
return (RedirectCancel (Device));
}
int use (void)
{
int DevType;
char RemoteName [40];
sprintf (RemoteName, "\\\\%s\\%s", Server, Net.Resource);
if (strlen (Device) > 2) {
DevType = DevTypePtr;
} else {
DevType = DevTypeDsk;
}
return (RedirectDevice (DevType, Device, RemoteName));
}
void ProcessArgs (void)
{
int j;
j = 0;
indx = 1;
strupr (Arguments [indx]);
while ((strcmp (Arguments [indx], ValidCommands[j].Command) != 0) & (j < MAX_CMDS)) {
j++;
}
if (j < MAX_CMDS) {
indx++;
parse ();
(ValidCommands[j].Function) ();
} else {
cprintf ("\n\rInvalid command: <%s>", Arguments [indx]);
}
}
main (int argc, char **argv)
{
int j;
char *ptr;
clrscr ();
if (argc < 2) {
help ();
exit (1);
}
Arguments = argv;
if (argv [1][0] == '@') {
if ((CmdStream = fopen(&argv [1][1], "rt")) == NULL) {
cprintf ("\n\n\rUnable to open indirect file %s\n\r", argv [1]);
} else {
FileArgs = calloc (MAX_ARGS, MAX_ARG_SIZE);
Arguments = FileArgs;
while (NULL != fgets (Buffer, sizeof (Buffer) - 1, CmdStream)) {
FileArgs [0] = "@NET.C";
j = 1;
ptr = strtok (Buffer, " ");
while (ptr != NULL) {
if ((j == 1) & (stricmp (ptr, "NET") == 0)) {
ptr = strtok (NULL, " ");
} else {
FileArgs [j] = calloc (1, strlen (ptr) + 1);
strcpy (FileArgs [j], ptr);
ptr = strtok (NULL, " ");
j++;
}
}
j--;
ptr = strchr (FileArgs [j], '\n');
if (ptr != NULL) {
*ptr = '\0';
}
ProcessArgs ();
}
}
} else {
ProcessArgs ();
}
}